define(["angularAMD"], function (angularAMD) {
    angularAMD.service('B0231Service', ['$rootScope', '$filter', '$translate', 'config', 'MMWService', '$mdDialog', '$calculater',
        function ($rootScope, $filter, $translate, config, $MMWService, $mdDialog, $calculater) {
            /**
             * options : {
             *     parent, // 父頁面
             *     machine_no, //機器編號
             *     machine_name, //機器名稱
             *     position_no, //工位編號
             *     area_no, //區域編號
             *     op_no, //作業站編號
             *     user_no, // 人員編號
             *     user_name, //人員名稱
             *     user_title, //職稱
             *     releaser_verified, //用於批次解鎖判斷是否已解鎖過
             *     feedback, //按下確定後要執行的內容
             *     back //按下關閉後執行的內容(未實作)
             * }
             */
            this.init = function (options) {
                var inspect_detail;

                if(options.parent == 'B0214' || options.parent == 'B0215' || options.parent == 'mobile_home'){
                    options.type = 0;   // 0: 機台
                }else if(options.parent == 'E01'){
                    options.type = 1;   // 1: 工位
                }

                 // 人員技能是否符合所需技能等級
                 function getMatchStatus(item){
                    if(item.user_grade_no > item.require_grade_no){
                        return 1;   //人員技能等級足夠
                    }else if(item.user_grade_no == item.require_grade_no){
                        return 0;   //人員技能等級剛好符合
                    }else{
                        return -1;  //人員技能等級不足
                    }
                }

                function beforeOpenDialog(feedback){
                    checkNeedInspetSkill(function(){
                        userSkillInspectInfoGet(function(userInfo){
                            inspetUserSkill(userInfo, function(){
                                // 人員技能檢驗通過，繼續執行後續邏輯
                                if(options.feedback)
                                    options.feedback();
                            }, function(){
                                // 人工技能檢驗不通過，開啟「人員技能檢驗」視窗
                                if(feedback)
                                    feedback();
                            });
                        });
                    });
                }

                // 檢查是否有設定技能
                function checkNeedInspetSkill(feedback){
                    var page_mode = '';
                    var query_condition_info = [];

                    if(options.type === 0){
                        page_mode = '40-1'; //設備設定技能取得
                        query_condition_info = [
                            {column_name: 't.EQUIPMENTNO', query_mode: '0', value: options.machine_no, merge_condition_model: 'AND'}
                        ];
                    } else {
                        page_mode = '40-2'; //工位設定技能取得
                        query_condition_info = [
                            {column_name: 't.PDLINENO', query_mode: '0', value: options.area_no, merge_condition_model: 'AND'},
                            {column_name: 't.POSITIONNO', query_mode: '0', value: options.position_no, merge_condition_model: 'AND'}
                        ];
                    }

                    $MMWService.pageNumberInfoGet({
                        page_mode : page_mode,
                        query_condition_info: query_condition_info
                    }, function(items){
                        if(items && items.length > 0){
                            // 有設定技能，執行技能檢驗邏輯
                            if (feedback)
                                feedback();
                        } else {
                            // 不需檢驗人員技能，繼續執行後續邏輯
                            if(options.feedback)
                                options.feedback();
                        }
                    });
                }

                // 人員技能檢驗
                function inspetUserSkill(userInfo, passFunction, notPassFunction){
                    if(userInfo.skill_inspect_detail && userInfo.skill_inspect_detail.length > 0){
                        var pass = true;
                        for(var i = 0; i < userInfo.skill_inspect_detail.length; i++){
                            //人員只要其中一項技能等級未達到需求等級，即為不合格
                            if(userInfo.skill_inspect_detail[i].light === 'red'){
                                pass = false;
                                break;
                            }
                        }
                        if(pass){
                            if(passFunction)
                                passFunction();
                        }else{
                            if(notPassFunction)
                                notPassFunction();
                        }
                    }else{
                        $rootScope.showAlert($filter('translate')('B0231.msg.user_skill_empty'));
                    }
                }

                // 人員技能檢驗資訊取得
                function userSkillInspectInfoGet(feedback){
                    var content = {
                        user_no: options.user_no,
                        type: options.type  // 0: 機台, 1: 工位
                    };
                    if(options.type == 0){  // 機台查詢條件 = 機台編號
                        content.id = options.machine_no;
                    }else if(options.type == 1){    // 工位機查詢條件 = 工位機編號+區域編號+作業站編號
                        content.id = options.position_no;
                        content.parameter1 = options.area_no,
                        content.parameter2 = options.op_no;
                    }

                    $MMWService.sendToSMESServer({
                        uri: 'tcSMES_skill.clsSMES.required_skills_info_get',
                        content: content,
                        success: function (data) {
                            inspect_detail = data.skill_inspect_detail;
                            if(feedback)
                                feedback(data);
                        }
                    });
                }

                // 技能限制解除作業
                function unlockSkillLimitProcess(user_no, user_pw, feedback){
                    var content = {
                        user_no: user_no,
                        user_pw: user_pw,
                        type: options.type
                    };
                    if(options.type == 0){  //0: 設備
                        content.id = options.machine_no;
                    }else if(options.type == 1){    //1: 工位機
                        content.id = options.area_no;
                    }
                    $MMWService.sendToSMESServer({
                        uri: 'tcSMES_skill.clsSMES.unlock_skill_limit_process',
                        content: content,
                        success: function (data) {
                            if(feedback)
                                feedback(data);
                        }
                    });
                }

                function openPasswordDialog(feedback){
                    $mdDialog.dialog(
                        'module/moduleB/program/B02/B0231/B0231.password.html',
                        function(dialog){
                            return {
                                css_url:'module/moduleB/program/B02/B0231/B0231.password.css',
                                account: '',
                                password: '',
                                type: options.type,
                                beforeShown: function(){

                                },
                                showPassword: function(id){
                                    if(document.getElementById(id).type == 'password'){
                                        document.getElementById(id).type = 'text';
                                        dialog[id+'_show'] = true;
                                    } else {
                                        document.getElementById(id).type = 'password';
                                        dialog[id+'_show'] = false;
                                    }
                                },
                                back: function () {
                                    dialog.hide();
                                },
                                confirm: function () {
                                    var msg = '';

                                    if(dialog.account == ''){
                                        msg += $filter('translate')('B0231.password.msg.account_empty');
                                    } else if(dialog.password == ''){
                                        msg += $filter('translate')('B0231.password.msg.password_empty');
                                    }

                                    if(msg == ''){
                                        unlockSkillLimitProcess(dialog.account, dialog.password, function(){
                                            if(options.req_check){//回傳需要檢驗訊息
                                               options.req_check(dialog);
                                             }
                                            dialog.hide();
                                            if(feedback)
                                                feedback();
                                        });
                                    } else {
                                        $rootScope.showAlert(msg);
                                    }
                                }
                            };
                        }
                    );
                }

                var openDialog = function(){
                    $mdDialog.dialog(
                        'module/moduleB/program/B02/B0231/B0231.html',
                        function (dialog) {
                            return {
                                css_url:'module/moduleB/program/B02/B0231/B0231.css',
                                type : options.type,
                                machine: options.machine_no + '(' + options.machine_name +')',
                                position: options.position_no,
                                employee: options.user_no + '('+ options.user_name + ')',
                                // 20240108 modify by wenwei for M#154330: 61000[MSSQL][H5端][上工]人员技能页面 校验部分栏位不显示【6009可复现】
                                user_title: options.user_title,
                                inspect_detail: inspect_detail || [],
                                releaser_verified: options.releaser_verified, //已驗證過解除者帳號密碼
                                // 20210326 modify by 奕達 for M#90132 start
                                getLight: function(item){
                                    //人員等級>需求等級: 綠燈, 人員等級=需求等級: 黃燈, 人員等級<需求等級: 紅燈
                                    // if(getMatchStatus(item) == 1){
                                    //     return 'green';
                                    // }else if(getMatchStatus(item) == 0){
                                    //     return 'yellow';
                                    // }else{
                                    //     return 'red';
                                    // }
                                    return item.light
                                },
                                getTextColor: function(item){
                                    // if(getMatchStatus(item) == -1){
                                    if(item.light === 'red'){
                                        return {'color': '#db4b3c'}; // 'red'
                                    }else{
                                        return '';
                                    }
                                },
                                // 20210326 modify by 奕達 for M#90132 end
                                forceOnWork: function () {
                                    if(!dialog.releaser_verified){
                                        openPasswordDialog(function(){
                                            dialog.releaser_verified = true;
                                            if(options.feedback)
                                                options.feedback(dialog);
                                        });
                                    }else{
                                        if(options.feedback)
                                            options.feedback(dialog);
                                    }
                                },
                                back: function () {
                                    dialog.hide();
                                }
                            };
                        }
                    );
                };

                (function(){
                    beforeOpenDialog(function(){
                        openDialog();
                    });
                })();
            };
        }]);
});
